//---------------------------------------------------------------------------
// fonctions de génération dynamique de tableau
//---------------------------------------------------------------------------
var data_list = new Array();
var col_list = new Array();
var tri = '';
var inverse = false;

function Field(p_name, p_type) { 
    var name = p_name; 
    var type = p_type; 
     
    this.methode = function() { 
        alert("Attributs: " + name + ", " + type); 
    } 
} 


//---------------------------------------------------------------------------
// constitution du tableau
//---------------------------------------------------------------------------
function add_col(col_name) {
	var col = new Field(col_name, 'text');
	col_list[col_list.length] = col;
	alert(col_list.length);
}


//---------------------------------------------------------------------------
// affichage du tableau
//---------------------------------------------------------------------------
function affichage(id_table, ordre_tri) {
	//---------------------------------------
	// ajout d'un tag TD contenant du texte
	function appendTD(text, td_class) {
		var td = document.createElement("TD")
		td.appendChild(document.createTextNode(text))
		if (td_class != null) {
			td.setAttribute('class', td_class);
		}
		row.appendChild(td);
	}

	//---------------------------------------
	// ajout d'un tag TD contenant une IMG
	function appendTDIMG(src, td_class) {
		var td = document.createElement("TD")
		if (src != '') {
			var img = document.createElement('IMG');
			img.setAttribute('src', src);
			td.appendChild(img)
		}
		if (td_class != null) {
			td.setAttribute('class', td_class);
		}
		row.appendChild(td);
	}
	
	//---------------------------------------
	// tri du tableau avant affichage
	if (ordre_tri == tri)
		inverse = !inverse;
	else
		inverse = false;
	tri = ordre_tri;
	tache_list.sort(sortfunction);


	//---------------------------------------
	// constitution du tableau
	var tbody = document.getElementById(id_table).getElementsByTagName('TBODY')[0];
	for (var i=tbody.childNodes.length-1; i>=0; i--) {
		// suppression des lignes existantes
		tbody.removeChild(tbody.childNodes[i]);
	}
	
	// ajout des nouvelles lignes triées
	var ind = 0;
	for (var i=0; i<tache_list.length; i++) {
		if (!tache_list[i]['hidden']) {
			var row = document.createElement("TR")
			row.setAttribute('class', (ind % 2 == 1 ? 'impair' : 'pair'));
			
			var td = document.createElement("TD")
			var a = document.createElement('A');
			var img = document.createElement('IMG');
			a.setAttribute('href', tache_list[i]['show_href']);
			img.setAttribute('src', tache_list[i]['show_img_src']);
			a.appendChild(img);
			td.appendChild(a)
			td.setAttribute('class', 'tache');
			row.appendChild(td);
			
			// autres colonnes
			appendTDIMG(tache_list[i]['retard_img_src'], 'tache');
			appendTD(tache_list[i]['categorie']);
			appendTD(tache_list[i]['libelle']);
			if (tache_list[i]['nb_fils'] > 0) {
				appendTD('+');
				// index du père
			} else {
				appendTD('');
			}
			appendTDIMG(tache_list[i]['urgence_src']);
			appendTD(tache_list[i]['etat']);
			appendTD(tache_list[i]['date_debut_formate']);
			appendTD(tache_list[i]['date_echeance_formate']);
			appendTD(tache_list[i]['charges']);
			appendTD(tache_list[i]['avancement']);
			appendTD(tache_list[i]['depassement']);
			tbody.appendChild(row);
			ind++;
		}
	}
}


//---------------------------------------------------------------------------
// routine de comparaison pour tri de tableau
//---------------------------------------------------------------------------
function sortfunction(a, b){
	//Compare "a" and "b" in some fashion, and return -1, 0, or 1
	if (!inverse)
		return (a[tri] > b[tri] ? 1 : (a[tri] == b[tri] ? 0 : -1));
	else
		return (a[tri] > b[tri] ? -1 : (a[tri] == b[tri] ? 0 : 1));
}


//---------------------------------------------------------------------------
// recherche d'une valeur dans un tableau
//---------------------------------------------------------------------------

function find() {
	var filtre = prompt ("Filtre :",".*");
	for (var i=0; i<tache_list.length; i++) {
		var re = new RegExp(filtre, 'i');
		if (tache_list[i]['libelle'].match(re) == null) {
			tache_list[i]['hidden'] = true;
		}
	}
	affichage('libelle');
}
